package com.wjw.java.others.date_;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * LocalDate：包含 年月日
 * LocalTime：包含 时分秒
 * LocalDateTime：包含 年月日 时分秒
 * ---------------------------------------------------------
 * DateTimeFormatter类似与SimpleDateFormat：进行日期格式化
 * ---------------------------------------------------------
 * 其他判断闰年什么的查看API文档
 */
public class LocalDateTime_ {
    public static void main(String[] args) {
        show_Year_Month_Day_Hour_Minute_Second();
        System.out.println("------------------------------------------");
        date_Format();
        System.out.println("------------------------------------------");
        get_Instant_Date();
        System.out.println("------------------------------------------");
        method_Plus_Minus();
    }

    /**
     * 显示 年月日、时分秒
     */
    public static void show_Year_Month_Day_Hour_Minute_Second(){
        //获取当前的日期对象
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        int year = ldt.getYear();//获取年
        System.out.println("年："+year);

        Month month = ldt.getMonth();//获取英文的月份
        System.out.println("英文月份："+month);
        int monthValue = ldt.getMonthValue();//获取数字的月份
        System.out.println("数字月份："+monthValue);

        int day = ldt.getDayOfMonth();
        System.out.println("日："+day);

        int hour = ldt.getHour();
        System.out.println("时："+hour);

        int minute = ldt.getMinute();
        System.out.println("分："+minute);

        int second = ldt.getSecond();
        System.out.println("秒："+second);
    }

    /**
     * 日期格式化：LocalDateTime 格式化为 String类型的字符串
     */
    private static void date_Format() {
        LocalDateTime ldt = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String result = formatter.format(ldt);
        System.out.println(result);
    }

    /**
     * 获取时间戳：时间戳Instant和Date类型之间的转换
     */
    private static void get_Instant_Date(){
        //1.通过静态方法now(),获取当前的时间戳对象
        Instant now = Instant.now();
        System.out.println(now);
        //2.通过from(),可以将时间戳Instant转为Date
        Date date = Date.from(now);
        System.out.println(date);
        //3.通过toInstant(),可以将Date转为时间戳Instant
        Instant instant = date.toInstant();
        System.out.println(instant);
    }

    /**
     * 对日期进行加、减操作
     * plusXxx()加法操作
     * minusXxx()减法操作
     */
    private static void method_Plus_Minus(){
        LocalDateTime ldt = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("当前时间：："+formatter.format(ldt));
        //当前时间：年+2,月+2,日+1,小时-1之后的日期是
        LocalDateTime future = ldt.plusYears(2).plusMonths(2).plusDays(1).minusHours(1);
        System.out.println("当前时间：年+2,月+2,日+1,小时-1之后的日期是："+formatter.format(future));
    }
}
